|
Emplacement du menu |
---|
Surface → Fill boundary curves |
Ateliers |
Surface |
Raccourci par défaut |
Aucun |
Introduit dans la version |
0.17 |
Voir aussi |
Aucun |
Surface Remplir entre les courbes limites crée une surface paramétrique à partir de deux, trois ou quatre arêtes de limite en essayant de créer une transition douce entre elles.
A gauche : arêtes utilisées pour générer une surface avec l'outil Remplir entre les courbes limites, 4 arêtes connectées, 3 arêtes connectées et 2 arêtes déconnectées.
A droite : surface résultante de l'utilisation de 4, 3 et 2 arêtes respectivement.
Remarque : une fois créée, il n'est pas possible d'appliquer des contraintes supplémentaires à la surface créée.
Fill type : Stretch,
Coons ou
Curved.
Surface Remplir entre les courbes limites (classe Surface::GeomFillSurface
) est dérivée de la classe de base Part Feature (classe Part::Feature
via la sous-classe Part::Spline
), elle partage donc toutes les propriétés de cette dernière.
Outre les propriétés décrites dans Part Feature, Surface Remplir entre les courbes limites a les propriétés suivantes dans l'éditeur de propriétés.
Base
Enumeration
) : algorithme de remplissage appliqué. Stretch, le style avec les patchs les plus plats; Coons
, un style arrondi avec moins de profondeur que Curved; Curved, le style avec les patchs les plus arrondis.LinkSubList
) : une liste des arêtes qui seront utilisées pour construire la surface.BoolList
) :
Base
Bool
) : par défaut false
. Mis à true
, elle affichera une superposition avec les points de contrôle de la surface.
La forme de la surface dépend de la direction des arêtes choisies; si des arêtes sont sélectionnées et que le résultat est une surface qui "se tord" sur elle-même, l'une des arêtes peut avoir besoin de sa liste de sommets dans l'ordre inverse. Une surface qui se tord sur elle-même aura probablement des auto-intersections et sera donc une forme invalide. Ceci peut être vérifié avec Part Vérifier la géométrie.
Par exemple, si deux courbes ont les points
curve1 = [a, b, c, d]
curve2 = [e, f, g]
et la surface résultante après avoir utilisé Remplir entre les courbes limites ou
Surface Sections est une surface torsadée, vous pouvez créer une troisième courbe égale à l'une des deux courbes d'origine mais avec une liste de points inversée.
Soit
curve1 = [a, b, c, d]
curve3 = [g, f, e]
ou
curve3 = [d, c, b, a]
curve2 = [e, f, g]
devrait fonctionner pour générer une surface qui non tordue.
En termes pratiques, cela signifie que toutes les arêtes utilisées pour générer une surface doivent être créées de préférence dans le même sens horaire ou anti-horaire. Suivre cette règle simple garantit généralement que la surface suivra la direction la plus lisse et ne se tordra pas.
Lorsque la propriété VueLighting de la surface est One side
, une face sera coloriée complètement en noir si sa direction normale pointe dans la Vue 3D (loin du visualiseur actuel) indiquant une face inversée par rapport aux autres faces colorées.
A gauche : les arêtes limites sont orientées dans la même direction et ainsi la surface générée est lisse.
A droite : les arêtes limites ont des directions opposées et donc la surface générée se tord sur elle-même, ce qui entraîne des auto-intersections.
Voir aussi : FreeCAD Script de base.
L'outil Surface Remplir entre les courbes limites peut être utilisé dans des macros et depuis la console Python en ajoutant l'objet Surface::GeomFillSurface
.
BoundaryList
de l'objet.FillType
.import FreeCAD as App
import Draft
doc = App.newDocument()
a = App.Vector(-140, -100, 0)
b = App.Vector(175, -108, 0)
c = App.Vector(200, 101, 0)
d = App.Vector(-135, 107, 70)
points1 = [a, App.Vector(-55, -91, 65), App.Vector(35, -85, -5), b]
obj1 = Draft.make_bspline(points1)
points2 = [b, App.Vector(217, -45, 55), App.Vector(217, 35, -15), c]
obj2 = Draft.make_bspline(points2)
points3 = [c, App.Vector(33, 121, 55), App.Vector(0, 91, 15), App.Vector(-80, 121, -40), d]
obj3 = Draft.make_bspline(points3)
points4 = [d, App.Vector(-140, 0, 45), a]
obj4 = Draft.make_bspline(points4)
doc.recompute()
surf = doc.addObject("Surface::GeomFillSurface", "Surface")
surf.BoundaryList = [(obj1, "Edge1"),
(obj2, "Edge1"),
(obj3, "Edge1"),
(obj4, "Edge1")]
doc.recompute()